/**
 * @file 时间处理方法文件
 */ 

/**
 * @func  
 * @desc  获取月的总天数
 * @param {number} year - 年
 * @param {number} month - 月
 */
function _getTotalDayByMonth(year, month) {
    month = parseInt(month, 10);
    let d = new Date(year, month, 0);
    return d.getDate();
}

/**
 * @func  
 * @desc  获取月的第一天是星期几
 * @param {number} year - 年
 * @param {number} month - 月
 * @param {number} day - 日
 */
function _getWeek(year, month, day) {
    return new Date(year, month - 1, day).getDay();
}

/**
 * @func  
 * @desc  处理带格式的日期
 * @param {number} year - 年
 * @param {number} month - 月
 * @param {number} day - 日
 */
function _getDateFormat(year, month, day) {
    month = month < 10 ? '0' + month : month;
    day = day < 10 ? '0' + day : day;
    return year + '-' + month + '-' + day;
}

/**
 * @func  
 * @desc  处理带格式的时间
 * @param {number} hour - 时
 * @param {number} minute - 分
 * @param {number} seconds - 秒
 */
function _getTimeFormat(hour, minute, seconds) {
    hour = hour < 10 ? '0' + hour : hour;
    minute = minute < 10 ? '0' + minute : minute;
    seconds = seconds < 10 ? '0' + seconds : seconds;
    return `${hour}:${minute}:${seconds}`;
}

/**
 * @func  
 * @desc 获取带时分秒格式的日期，年-月-日 时：分：秒
 * @param {number} stamp - 时间戳
 */
function _getTimeDateHMS(stamp) {
    let date = new Date(stamp * 1000);
    let hour = date.getHours();
    let minute = date.getMinutes();
    let seconds = date.getSeconds();
    let day = _getTimeDate(stamp);
    let time = _getTimeFormat(hour, minute, seconds)
    return `${day} ${time}`;
}

/**
 * @func  
 * @desc 获取对应日期时间戳，接口日期限定为当天八点
 * @param {string} date - 带格式的日期
 */
function _getTimeStamp(date) {
    return Math.floor(new Date(date).setHours(8, 0, 0, 0) / 1000);
}

/**
 * @func  
 * @desc 获取对应日期0点的时间戳
 * @param {string} date - 带格式的日期
 */
function _getZeroTimeStamp(date) {
    return Math.floor(new Date(date).setHours(0, 0, 0, 0) / 1000);
}

/**
 * @func  
 * @desc 获得当前月的第一天
 * @param {number} year - 年
 * @param {number} month - 月
 */
function _getMonthFirstDay(year, month) {
    return _getDateFormat(year, month, 1);
}

/**
 * @func  
 * @desc 获得当前月带格式的最后一天
 * @param {number} year - 年
 * @param {number} month - 月
 */
function _getMonthLastDay(year, month) {
    return _getDateFormat(year, month, _getTotalDayByMonth(year, month));
}

/**
 * @func  
 * @desc 计算带格式的下一天日期
 * @param {string} date - 日期
 */
function _getNextDay(date) {
    let day = new Date(date);
    day = +day + 1000 * 60 * 60 * 24;
    day = new Date(day);
    return _getDateFormat(day.getFullYear(), day.getMonth() + 1, day.getDate());
}

/**
 * @func  
 * @desc 计算带格式的前一天日期
 * @param {string} date - 日期
 */
function _getPrevDay(date) {
    let day = new Date(date);
    day = +day - 1000 * 60 * 60 * 24;
    day = new Date(day);
    return _getDateFormat(day.getFullYear(), day.getMonth() + 1, day.getDate());
}

/**
 * @func  
 * @desc 通过时间戳获取对应带格式的日期
 * @param {number} stamp - 时间戳
 */
function _getTimeDate(stamp) {
    let date = new Date(stamp * 1000);
    let year = date.getFullYear();
    let month = date.getMonth() + 1;
    let day = date.getDate();
    return _getDateFormat(year, month, day);
}

/**
 * @func  
 * @desc 将日期 x-x-x 格式换成 x年x月x日
 * @param {string} date - 日期 
 */
function _getYearMonthDay(date) {
    let day = date;
    day = day.replace(/^(\d+)\-(\d+)\-(\d+)$/, function ($0, $1, $2, $3) {
        return $1 + '年' + $2 + '月' + $3 + '日';
    });
    return day;
}

/**
 * @func  
 * @desc 通过时间戳获取年
 * @param {number} stamp - 时间戳
 */
function _getTimeYear(stamp) {
    let year = new Date(stamp * 1000).getFullYear();
    return year;
}

/**
 * @func  
 * @desc 通过时间戳获取月
 * @param {number} stamp - 时间戳
 */
function _getTimeMonth(stamp) {
    let month = new Date(stamp * 1000).getMonth() + 1;
    return month;
}

/**
 * @func  
 * @desc 通过时间戳获取月
 * @param {number} stamp - 时间戳
 */
function _getTimeDay(stamp) {
    let day = new Date(stamp * 1000).getDate();
    return day;
}

export {
    _getTotalDayByMonth,
    _getWeek,
    _getDateFormat,
    _getTimeFormat,
    _getTimeDateHMS,
    _getTimeStamp,
    _getZeroTimeStamp,
    _getMonthFirstDay,
    _getMonthLastDay,
    _getNextDay,
    _getPrevDay,
    _getTimeDate,
    _getYearMonthDay,
    _getTimeYear,
    _getTimeMonth,
    _getTimeDay
}